package com.ruoyi.project.erp.mapper;

import com.ruoyi.project.erp.domain.WorklogTemp;
import com.ruoyi.project.erp.vo.WorklogItemVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

@Mapper
public interface WorklogTempMapper {
    /**
     * 根据ID查询临时工时记录详情
     * @param id 临时工时ID
     * @return 临时工时记录对象
     */
    WorklogTemp selectWorklogTempById(Long id);

    /**
     * 查询临时工时记录列表
     * @param worklogTemp 查询条件
     * @return 临时工时记录集合
     */
    List<WorklogTemp> selectWorklogTempList(WorklogTemp worklogTemp);

    /**
     * 新增临时工时记录
     * @param worklogTemp 临时工时记录信息
     * @return 结果
     */
    int insertWorklogTemp(WorklogTemp worklogTemp);

    /**
     * 修改临时工时记录
     * @param worklogTemp 临时工时记录信息
     * @return 结果
     */
    int updateWorklogTemp(WorklogTemp worklogTemp);

    /**
     * 根据ID删除临时工时记录
     * @param id 临时工时ID
     * @return 结果
     */
    int deleteWorklogTempById(Long id);

    /**
     * 根据用户、项目和日期查询唯一的临时记录
     * @param userId 用户ID
     * @param projectId 项目ID
     * @param workDate 工作日期
     * @return 临时工时记录对象
     */
    public WorklogTemp selectWorklogTempUnique(@Param("userId") String userId,
                                               @Param("projectId") String projectId,
                                               @Param("taskId") Long taskId, // <-- 增加
                                               @Param("workDate") Date workDate);

    /**
     * 统计指定用户某天的暂存工时总和
     * @param userId 用户ID
     * @param workDate 工作日期
     * @return 暂存工时总和
     */
    BigDecimal sumTempHoursByUserIdAndDate(@Param("userId") String userId, @Param("workDate") Date workDate);

    List<WorklogTemp> selectTempWorklogsByUserAndDate(String userId, Date workDate);

    void deleteWorklogTempByIds(Long[] toArray);

    List<WorklogItemVO> selectTempWorklogItemsVO(String userId, Date workDate);

    int countUnassignedByDate(String userId, Date workDate);
    int countUnassignedWorkStyleByDate(String userId, Date workDate);
    int countUnassignedClosedLoopByDate(String userId, Date workDate);

    List<WorklogTemp> selectListForSubmit(String userId, Date workDate);
}
